package co.edu.usbcali.egrapico.logica;

import java.util.StringTokenizer;

/**
 * Clase para la traducci�n de la representaci�n de una
 * <Code>lista de
 * Aplicaciones</Code> desde <I>GraPiCO Textual</I> hacia <I>C�lculo PiCO</I>.
 * <P> Recibe en <I>GraPiCO Textual</I>: <Blockquote><Pre> Aplicaci�n_1,...,Aplicaci�n_n
 * </Pre></Blockquote> <P> Traducci�n a <I>C�lculo PiCO</I> de cada constructor: <Blockquote><Pre> Aplicaci�n_1,...,Aplicaci�n_n
 * </Pre></Blockquote>
 *
 * @author Johanna Noguera Le�n & Alejandro Berm�dez Mart�nez.
 * @version 1.0
 * @since Enero de 2005
 */
public class ApplicationsList {

    // Variable para almacenar la lista de aplicaciones representada en c�lculo PiCO.
    String applicationsListPico = "";
    /**
     * Variable tokenizada para guardar las aplicaciones en GraPiCO textual
     * obtenidos de la lista de aplicaciones.
     */
    StringTokenizer stApplicationsGraPicoT;
    // Nombre o lista de nombres de los procesos que se est�n traduciendo.
    String nameCurrentProcess = "";

    /**
     * M�todo constructor de la clase
     * <Code>ApplicationsList<Code>.<P>
     * Toma una
     * <Code>Lista de Aplicaciones</Code> representada en <I>GraPiCO Textual</I>
     * y separa las aplicaciones usando el s�mbolo de sincronizaci�n coma (","),
     * guard�ndolas en un
     * <Code>String<Code> tokenizado.
     *
     * @param         applicationsListGraPicoT
     *                Expresi�n equivalente a la representaci�n de
     *                una
     * <Code>Lista de Aplicaciones</Code> en <I>GraPiCO Textual</I>.
     * @param nameProcess Nombre o lista de nombres de procesos.
     */
    public ApplicationsList(String applicationsListGraPicoT, String nameProcess) {

        // Se obtiene el nombre o lista de nombres de procesos.
        nameCurrentProcess = nameProcess;

        /**
         * Los identificadores en GraPiCO textual son almacenados en un String
         * tokenizado
         */
        stApplicationsGraPicoT = new StringTokenizer(applicationsListGraPicoT, ",");
    }

    /**
     * M�todo generador de la traducci�n de una
     * <Code>Lista de Aplicaciones<Code>.<P>
     * Se obtiene la traducci�n de cada
     * <Code>Aplicaci�n<Code> que se obtiene
     * del
     * <Code>String<Code> tokenizado de aplicaciones en <I>GraPiCO Textual</I> y
     * se concatenan separ�ndolos con el s�mbolo de sincronizaci�n coma (",") para
     * formar as� una
     * <Code>Lista de Aplicaciones<Code> representada en <I>C�lculo PiCO</I>.
     *
     * @return   la
     * <Code>Lista de Aplicaciones</Code> traducida a <I>C�lculo PiCO</I>.
     */
    public String traslate() {
        int nuSize = stApplicationsGraPicoT.countTokens();
        while (stApplicationsGraPicoT.hasMoreTokens()) {
            Application application = new Application(stApplicationsGraPicoT.nextToken(), nameCurrentProcess);
            if (nuSize != 1) {
                applicationsListPico += application.traslate() + " , ";
            } else {
                applicationsListPico += application.traslate();
            }
            nuSize--;
        }
        return applicationsListPico;
    }
}